/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package session;

import entities.*;
import java.util.*;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import session.facade.*;

/**
 *
 * @author sflesca
 */
@Stateless
public class OrderManager implements OrderManagerLocal {

    @EJB
    private ClienteFacadeLocal clienteFac;
    
    @EJB
    private ProdottoFacadeLocal prodottoFac;
    
    @EJB
    private OrdineFacadeLocal ordineFac;
    
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public Ordine ordina(Cliente cliente, List<Prodotto> prodotti) throws
            ClienteNonValidoException, ProdottoNonDisponibileException{
        Cliente c = clienteFac.find(cliente.getId());
        if (c==null)
            throw new ClienteNonValidoException();
        Ordine ord = new Ordine();
        ord.setCliente(c);
        List<Prodotto> prodottiNonDisponibili = new LinkedList<Prodotto>();
        for (Prodotto p : prodotti){
            Prodotto pver = prodottoFac.find(p);
            if(pver.getQtaAvailable()>0){
                DettaglioOrdine dett = new DettaglioOrdine();
                dett.setOrdine(ord);
                ord.getDettagli().add(dett);
                dett.setProdotto(pver);
                dett.setQta(1);
            }else {
                prodottiNonDisponibili.add(pver);
            }
        }
        if(!prodottiNonDisponibili.isEmpty())
            throw new ProdottoNonDisponibileException(prodottiNonDisponibili);
        ordineFac.create(ord);
        return ord;
    }

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
    
    
}
